#region Copyright & License

//
// Copyright 2001-2005 The Apache Software Foundation
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//

#endregion

using System;
using System.IO;
using System.Reflection;
using System.Xml;
using log4net.Repository;

namespace log4net.Config {
  /// <summary>
  /// Use this class to initialize the log4net environment using an Xml tree.
  /// </summary>
  /// <remarks>
  /// <para>
  /// <b>DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator.</b>
  /// </para>
  /// <para>
  /// Configures a <see cref="ILoggerRepository"/> using an Xml tree.
  /// </para>
  /// </remarks>
  /// <author>Nicko Cadell</author>
  /// <author>Gert Driesen</author>
  [Obsolete("Use XmlConfigurator instead of DOMConfigurator")]
  public sealed class DOMConfigurator {
    #region Private Instance Constructors

    /// <summary>
    /// Private constructor
    /// </summary>
    DOMConfigurator() {}

    #endregion Protected Instance Constructors

    #region Configure static methods

    /// <summary>
    /// Automatically configures the log4net system based on the 
    /// application's configuration settings.
    /// </summary>
    /// <remarks>
    /// <para>
    /// <b>DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator.</b>
    /// </para>
    /// Each application has a configuration file. This has the
    /// same name as the application with '.config' appended.
    /// This file is XML and calling this function prompts the
    /// configurator to look in that file for a section called
    /// <c>log4net</c> that contains the configuration data.
    /// </remarks>
    [Obsolete("Use XmlConfigurator.Configure instead of DOMConfigurator.Configure")]
    public static void Configure() {
      XmlConfigurator.Configure(LogManager.GetRepository(Assembly.GetCallingAssembly()));
    }

    /// <summary>
    /// Automatically configures the <see cref="ILoggerRepository"/> using settings
    /// stored in the application's configuration file.
    /// </summary>
    /// <remarks>
    /// <para>
    /// <b>DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator.</b>
    /// </para>
    /// Each application has a configuration file. This has the
    /// same name as the application with '.config' appended.
    /// This file is XML and calling this function prompts the
    /// configurator to look in that file for a section called
    /// <c>log4net</c> that contains the configuration data.
    /// </remarks>
    /// <param name="repository">The repository to configure.</param>
    [Obsolete("Use XmlConfigurator.Configure instead of DOMConfigurator.Configure")]
    public static void Configure(ILoggerRepository repository) {
      XmlConfigurator.Configure(repository);
    }

    /// <summary>
    /// Configures log4net using a <c>log4net</c> element
    /// </summary>
    /// <remarks>
    /// <para>
    /// <b>DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator.</b>
    /// </para>
    /// Loads the log4net configuration from the XML element
    /// supplied as <paramref name="element"/>.
    /// </remarks>
    /// <param name="element">The element to parse.</param>
    [Obsolete("Use XmlConfigurator.Configure instead of DOMConfigurator.Configure")]
    public static void Configure(XmlElement element) {
      XmlConfigurator.Configure(LogManager.GetRepository(Assembly.GetCallingAssembly()), element);
    }

    /// <summary>
    /// Configures the <see cref="ILoggerRepository"/> using the specified XML 
    /// element.
    /// </summary>
    /// <remarks>
    /// <para>
    /// <b>DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator.</b>
    /// </para>
    /// Loads the log4net configuration from the XML element
    /// supplied as <paramref name="element"/>.
    /// </remarks>
    /// <param name="repository">The repository to configure.</param>
    /// <param name="element">The element to parse.</param>
    [Obsolete("Use XmlConfigurator.Configure instead of DOMConfigurator.Configure")]
    public static void Configure(ILoggerRepository repository, XmlElement element) {
      XmlConfigurator.Configure(repository, element);
    }

    /// <summary>
    /// Configures log4net using the specified configuration file.
    /// </summary>
    /// <param name="configFile">The XML file to load the configuration from.</param>
    /// <remarks>
    /// <para>
    /// <b>DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator.</b>
    /// </para>
    /// <para>
    /// The configuration file must be valid XML. It must contain
    /// at least one element called <c>log4net</c> that holds
    /// the log4net configuration data.
    /// </para>
    /// <para>
    /// The log4net configuration file can possible be specified in the application's
    /// configuration file (either <c>MyAppName.exe.config</c> for a
    /// normal application on <c>Web.config</c> for an ASP.NET application).
    /// </para>
    /// <example>
    /// The following example configures log4net using a configuration file, of which the 
    /// location is stored in the application's configuration file :
    /// </example>
    /// <code lang="C#">
    /// using log4net.Config;
    /// using System.IO;
    /// using System.Configuration;
    /// 
    /// ...
    /// 
    /// DOMConfigurator.Configure(new FileInfo(ConfigurationSettings.AppSettings["log4net-config-file"]));
    /// </code>
    /// <para>
    /// In the <c>.config</c> file, the path to the log4net can be specified like this :
    /// </para>
    /// <code lang="XML" escaped="true">
    /// <configuration>
    ///		<appSettings>
    ///			<add key="log4net-config-file" value="log.config"/>
    ///		</appSettings>
    ///	</configuration>
    /// </code>
    /// </remarks>
    [Obsolete("Use XmlConfigurator.Configure instead of DOMConfigurator.Configure")]
    public static void Configure(FileInfo configFile) {
      XmlConfigurator.Configure(LogManager.GetRepository(Assembly.GetCallingAssembly()), configFile);
    }

    /// <summary>
    /// Configures log4net using the specified configuration file.
    /// </summary>
    /// <param name="configStream">A stream to load the XML configuration from.</param>
    /// <remarks>
    /// <para>
    /// <b>DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator.</b>
    /// </para>
    /// <para>
    /// The configuration data must be valid XML. It must contain
    /// at least one element called <c>log4net</c> that holds
    /// the log4net configuration data.
    /// </para>
    /// <para>
    /// Note that this method will NOT close the stream parameter.
    /// </para>
    /// </remarks>
    [Obsolete("Use XmlConfigurator.Configure instead of DOMConfigurator.Configure")]
    public static void Configure(Stream configStream) {
      XmlConfigurator.Configure(LogManager.GetRepository(Assembly.GetCallingAssembly()), configStream);
    }

    /// <summary>
    /// Configures the <see cref="ILoggerRepository"/> using the specified configuration 
    /// file.
    /// </summary>
    /// <param name="repository">The repository to configure.</param>
    /// <param name="configFile">The XML file to load the configuration from.</param>
    /// <remarks>
    /// <para>
    /// <b>DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator.</b>
    /// </para>
    /// <para>
    /// The configuration file must be valid XML. It must contain
    /// at least one element called <c>log4net</c> that holds
    /// the configuration data.
    /// </para>
    /// <para>
    /// The log4net configuration file can possible be specified in the application's
    /// configuration file (either <c>MyAppName.exe.config</c> for a
    /// normal application on <c>Web.config</c> for an ASP.NET application).
    /// </para>
    /// <example>
    /// The following example configures log4net using a configuration file, of which the 
    /// location is stored in the application's configuration file :
    /// </example>
    /// <code lang="C#">
    /// using log4net.Config;
    /// using System.IO;
    /// using System.Configuration;
    /// 
    /// ...
    /// 
    /// DOMConfigurator.Configure(new FileInfo(ConfigurationSettings.AppSettings["log4net-config-file"]));
    /// </code>
    /// <para>
    /// In the <c>.config</c> file, the path to the log4net can be specified like this :
    /// </para>
    /// <code lang="XML" escaped="true">
    /// <configuration>
    ///		<appSettings>
    ///			<add key="log4net-config-file" value="log.config"/>
    ///		</appSettings>
    ///	</configuration>
    /// </code>
    /// </remarks>
    [Obsolete("Use XmlConfigurator.Configure instead of DOMConfigurator.Configure")]
    public static void Configure(ILoggerRepository repository, FileInfo configFile) {
      XmlConfigurator.Configure(repository, configFile);
    }

    /// <summary>
    /// Configures the <see cref="ILoggerRepository"/> using the specified configuration 
    /// file.
    /// </summary>
    /// <param name="repository">The repository to configure.</param>
    /// <param name="configStream">The stream to load the XML configuration from.</param>
    /// <remarks>
    /// <para>
    /// <b>DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator.</b>
    /// </para>
    /// <para>
    /// The configuration data must be valid XML. It must contain
    /// at least one element called <c>log4net</c> that holds
    /// the configuration data.
    /// </para>
    /// <para>
    /// Note that this method will NOT close the stream parameter.
    /// </para>
    /// </remarks>
    [Obsolete("Use XmlConfigurator.Configure instead of DOMConfigurator.Configure")]
    public static void Configure(ILoggerRepository repository, Stream configStream) {
      XmlConfigurator.Configure(repository, configStream);
    }

    #endregion Configure static methods

    #region ConfigureAndWatch static methods

#if (!NETCF && !SSCLI)

    /// <summary>
    /// Configures log4net using the file specified, monitors the file for changes 
    /// and reloads the configuration if a change is detected.
    /// </summary>
    /// <param name="configFile">The XML file to load the configuration from.</param>
    /// <remarks>
    /// <para>
    /// <b>DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator.</b>
    /// </para>
    /// <para>
    /// The configuration file must be valid XML. It must contain
    /// at least one element called <c>log4net</c> that holds
    /// the configuration data.
    /// </para>
    /// <para>
    /// The configuration file will be monitored using a <see cref="FileSystemWatcher"/>
    /// and depends on the behavior of that class.
    /// </para>
    /// <para>
    /// For more information on how to configure log4net using
    /// a separate configuration file, see <see cref="Configure(FileInfo)"/>.
    /// </para>
    /// </remarks>
    /// <seealso cref="Configure(FileInfo)"/>
    [Obsolete("Use XmlConfigurator.ConfigureAndWatch instead of DOMConfigurator.ConfigureAndWatch")]
    public static void ConfigureAndWatch(FileInfo configFile) {
      XmlConfigurator.ConfigureAndWatch(LogManager.GetRepository(Assembly.GetCallingAssembly()), configFile);
    }

    /// <summary>
    /// Configures the <see cref="ILoggerRepository"/> using the file specified, 
    /// monitors the file for changes and reloads the configuration if a change 
    /// is detected.
    /// </summary>
    /// <param name="repository">The repository to configure.</param>
    /// <param name="configFile">The XML file to load the configuration from.</param>
    /// <remarks>
    /// <para>
    /// <b>DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator.</b>
    /// </para>
    /// <para>
    /// The configuration file must be valid XML. It must contain
    /// at least one element called <c>log4net</c> that holds
    /// the configuration data.
    /// </para>
    /// <para>
    /// The configuration file will be monitored using a <see cref="FileSystemWatcher"/>
    /// and depends on the behavior of that class.
    /// </para>
    /// <para>
    /// For more information on how to configure log4net using
    /// a separate configuration file, see <see cref="Configure(FileInfo)"/>.
    /// </para>
    /// </remarks>
    /// <seealso cref="Configure(FileInfo)"/>
    [Obsolete("Use XmlConfigurator.ConfigureAndWatch instead of DOMConfigurator.ConfigureAndWatch")]
    public static void ConfigureAndWatch(ILoggerRepository repository, FileInfo configFile) {
      XmlConfigurator.ConfigureAndWatch(repository, configFile);
    }
#endif

    #endregion ConfigureAndWatch static methods
  }
}